#ifndef _OBJECT_THREAD_H

#define _OBJECT_THREAD_H

#include "obj_fn.h"

typedef struct ObjThread
{
    ObjHeader obj_header;
    Value *stack; // 运行时栈的栈底
    Value *esp; // 运行时的栈顶
    uint32_t stack_capacity; // 栈容量

    Frame *frames; // 调用空框架
    uint32_t used_frame_num; // 已使用的frame数量
    uint32_t frame_capacity; // frame容量

    ObjUpvalue *open_upvalues; // upvalue的链表首节点
    struct objThread *caller; // 当前thread的调用者

    Value error_obj; // 
} ObjThread; // 线程对象

void prepare_frame(ObjThread *obj_thread, ObjClosure *obj_closure, Value *stack_start);
ObjThread* new_objThread(VM *vm, ObjClosure *obj_closure);
void reset_thread(ObjThread *obj_thread, ObjClosure *obj_closure);

#endif